;用于定义loader中的宏变量
LOADER_BASE_ADDR 	equ	0x500
LOADER_CODE_ADDR 	equ 0x900
LOADER_STACK_TOP 	equ 0x9f000
LOADER_GDT_LIMIT 	equ 0x700 - LOADER_BASE_ADDR

;定义段描述符高32位的各种属性
DESC_BASE_31TO24_OFFSET equ   24
DESC_G_4K               equ   1<<23
DESC_D_32               equ   1<<22
DESC_B_32               equ   1<<22
DESC_L_64               equ   1<<21
DESC_AVL_1              equ   1<<20
DESC_LIMIT_19TO16_OFFSET equ  16
DESC_P_1                equ   1<<15
DESC_DPL_0              equ   0<<13
DESC_DPL_1              equ   1<<13
DESC_DPL_2              equ   2<<13
DESC_DPL_3              equ   3<<13
DESC_S_USR              equ   1<<12
DESC_TYPE_X_EXE         equ   1<<11
DESC_TYPE_C_COR         equ   1<<10
DESC_TYPE_E_DOWN        equ   1<<10
DESC_TYPE_R             equ   1<<9
DESC_TYPE_W             equ   1<<9
DESC_TYPE_A             equ   1<<8
DESC_BASE_23TO16_OFFSET equ   0

;定义段选择子的属性
SELECTOR_GDTINDEX_OFFSET   equ  3
SELECTOR_TI_LDT			equ	  	1<<1
SELECTOR_RPL_0			equ   	0
SELECTOR_RPL_1			equ   	1
SELECTOR_RPL_2			equ   	2
SELECTOR_RPL_3			equ   	3

;定义页目录和页表的属性
PAGE_DIR_BASE			equ		0x1000
PAGE_SIZE              	equ     0x1000	
PAGE_US_U				equ		1<<2
PAGE_RW_W				equ		1<<1
PAGE_P                  equ     1<<0


;用于定义内核的相关宏变量
KERNEL_TEMP_ADDR        equ     0x70000
KERNEL_ENTRY_OFFSET     equ     0x18
KERNEL_STACK_TOP        equ     0xc009f000

;elf文件格式相关变量
;相对文件开头偏移
e_phentsize_offset      equ     42
e_phoff_offset          equ     28
e_phnum_offset          equ     44
;相对程序头偏移
p_type_offset           equ     0
p_filesz_offset         equ     16
p_offset_offset         equ     4
p_vaddr_offset          equ     8
;program header相关变量
PT_NULL                 equ     0


;再定义段选择子(不占内存)
;结构为
; | 描述符索引值:15~3 | TI:2 | RPL:1~0 |    
;描述符索引值为GDT表中的段下标，TI为0标识GDT，否则标识LDT;
;RPL是访问的请求特权级
SELECTOR_CODE equ	1 << SELECTOR_GDTINDEX_OFFSET | \
                    !SELECTOR_TI_LDT | \
                    SELECTOR_RPL_0
SELECTOR_DATA equ 	2 << SELECTOR_GDTINDEX_OFFSET | \
                    !SELECTOR_TI_LDT | \
                    SELECTOR_RPL_0
SELECTOR_VIDEO equ  3 << SELECTOR_GDTINDEX_OFFSET | \
                    !SELECTOR_TI_LDT | \
                    SELECTOR_RPL_0
;均为GDT,RPL=0


;IDT相关常量
IDT_DESC_P_1                equ     1<<15
IDT_DESC_DPL_0              equ     0<<13
IDT_DESC_S_USR              equ     1<<12
IDT_DESC_TYPE_D_32          equ     1<<11

IDT_SIMPLE_CNT              equ     0x80
IDT_SYSCALL_HANDLER         equ     0x80

;FAT文件系统的参数, 地址都是磁盘中的
;根目录的扇区数
FDT_SEC_SIZE            equ     14
;根目录的扇区号
FDT_SEC_ID             	equ		2*100+1
;根目录项的大小
FDT_ITEM_SIZE           equ     32
;表项内部起始扇区的地址
FDI_START_OFFSET        equ     0x1A
;FAT的扇区差距：实际扇区数=簇号*每簇扇区数+FAT_SEC_OFFSET
FAT_SEC_OFFSET          equ     2*100-1
;BPB_BytesPerSec的变量存储，每扇区字节数
FAT_BPS                 equ     0x200
;FAT1的起始坐标
FAT1_BASE               equ     0x200
;FAT2的起始坐标
FAT2_BASE               equ     0x1400
;FAT中BPB_RsvSecCnt的变量存储，每簇的扇区数
FAT_RsvdSecCnt          equ     0x8

;FAT文件系统读入内存的属性
;FDT扇区内存临时位置
FDT_TEMP_ADDR           equ     0x8000
;FAT扇区内存临时位置         
FAT_TEMP_ADDR           equ     0x8000